// @todo FIXME: Cannot be completely suppressed because it
// is unknown if 'until' or 'from' makes this
// give 0 results.
- $r = $r . $this->getCategoryTop();
+ $r = $this->getCategoryTop();
} else {
$r = $this->getCategoryTop() .
$r .
if ( $query === '' ) {
$query = $extraQueryRedirect;
} else {
- $query = $query . '&' . $extraQueryRedirect;
+ $query .= '&' . $extraQueryRedirect;
}
}
$anchor = $resultDetails['sectionanchor'] ?? '';
if ( $extraQuery === '' ) {
$extraQuery = $extraQueryRedirect;
} else {
- $extraQuery = $extraQuery . '&' . $extraQueryRedirect;
+ $extraQuery .= '&' . $extraQueryRedirect;
}
}
/// @todo UGLY UGLY
if ( is_array( $wgExtraNamespaces ) ) {
- $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
+ $wgCanonicalNamespaceNames += $wgExtraNamespaces;
}
// Hard-deprecate setting $wgDummyLanguageCodes in LocalSettings.php
LIST_OR
) ];
}
- $this->addJoinConds( [ 'ug1' => [ 'LEFT OUTER JOIN',
+ $this->addJoinConds( [ 'ug1' => [ 'LEFT JOIN',
array_merge( [
'ug1.ug_user=user_id',
'ug1.ug_expiry IS NULL OR ug1.ug_expiry >= ' . $db->addQuotes( $db->timestamp() )
$limitGroups = array_unique( $limitGroups );
$this->addTables( 'user_groups' );
$this->addJoinConds( [ 'user_groups' => [
- $excludeGroups ? 'LEFT OUTER JOIN' : 'JOIN',
+ $excludeGroups ? 'LEFT JOIN' : 'JOIN',
[
'ug_user=' . $revQuery['fields']['rev_user'],
'ug_group' => $limitGroups,
* Uses asynchronous I/O, allowing purges to be done in a highly parallel
* manner.
*
- * Could be replaced by curl_multi_exec() or some such.
+ * @todo Consider using MultiHttpClient.
*/
class SquidPurgeClient {
/** @var string */
// count-alias subselect fields to avoid abigious definition errors
$i = 0;
foreach ( $varMap as &$val ) {
- $val = $val . ' field' . ( $i++ );
+ $val .= ' field' . ( $i++ );
}
$selectSql = $this->selectSQLText(
$blobs = [];
foreach ( $pathsByBackend as $backendName => $paths ) {
$be = FileBackendGroup::singleton()->get( $backendName );
- $blobs = $blobs + $be->getFileContentsMulti( [ 'srcs' => $paths ] );
+ $blobs += $be->getFileContentsMulti( [ 'srcs' => $paths ] );
}
return $blobs;
if ( $this->repo->canCacheThumbs() ) {
$path = $this->repo->getZonePath( 'thumb' ) . '/' . $this->getHashPath();
if ( $suffix ) {
- $path = $path . $suffix . '/';
+ $path .= $suffix . '/';
}
return $path;
}
/**
- * Checks that the given URI is a valid one. Hardcoding the
- * protocols, because we only want protocols that both cURL
- * and php support.
+ * Check that the given URI is a valid one.
*
- * file:// should not be allowed here for security purpose (r67684)
+ * This hardcodes a small set of protocols only, because we want to
+ * deterministically reject protocols not supported by all HTTP-transport
+ * methods.
+ *
+ * "file://" specifically must not be allowed, for security purpose
+ * (see <https://www.mediawiki.org/wiki/Special:Code/MediaWiki/r67684>).
*
* @todo FIXME this is wildly inaccurate and fails to actually check most stuff
*
"config-invalid-db-server-oracle": "Chybné databázové TNS „$1“.\nPoužívejte buď „TNS Name“ nebo „Easy Connect“ (vizte [http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
"config-invalid-db-name": "Chybné jméno databáze „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
"config-invalid-db-prefix": "Chybný databázový prefix „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
- "config-connection-error": "$1.\n\nZkontrolujte server, uživatelské jméno a heslo a zkuste to znovu.",
+ "config-connection-error": "$1.\n\nZkontrolujte server, uživatelské jméno a heslo a zkuste to znovu. Pokud jako adresu databázového serveru používáte „localhost“, zkuste použít „127.0.0.1“ (a naopak).",
"config-invalid-schema": "Neplatné schéma pro MediaWiki „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9) a podtržítko (_).",
"config-db-sys-create-oracle": "Instalátor podporuje zakládání nového účtu pouze prostřednictvím účtu SYSDBA.",
"config-db-sys-user-exists-oracle": "Uživatelský účet „$1“ již existuje. SYSDBA lze použít pouze pro založení nového účtu!",
* @param string $container Resolved container name
* @param string $dir Resolved path relative to container
* @param array $params
- * @return Traversable|array|null Returns null on failure
+ * @return Traversable|string[]|null Returns null on failure
*/
abstract public function getFileListInternal( $container, $dir, array $params );
$key = $keyspace;
foreach ( $args as $arg ) {
$arg = str_replace( ':', '%3A', $arg );
- $key = $key . ':' . $arg;
+ $key .= ':' . $arg;
}
return strtr( $key, ' ', '_' );
}
EOR;
$txt = preg_replace_callback( $reg, [ $this, 'pageTextCallback' ], $txt );
$txt = "<DjVuTxt>\n<HEAD></HEAD>\n<BODY>\n" . $txt . "</BODY>\n</DjVuTxt>\n";
- $xml = preg_replace( "/<DjVuXML>/", "<mw-djvu><DjVuXML>", $xml, 1 );
- $xml = $xml . $txt . '</mw-djvu>';
+ $xml = preg_replace( "/<DjVuXML>/", "<mw-djvu><DjVuXML>", $xml, 1 ) .
+ $txt . '</mw-djvu>';
}
}
$name = strtolower( $name );
$attributes = Sanitizer::decodeTagAttributes( $attrText );
if ( isset( $params['attributes'] ) ) {
- $attributes = $attributes + $params['attributes'];
+ $attributes += $params['attributes'];
}
if ( isset( $this->mTagHooks[$name] ) ) {
if ( $enoughToc && $isMain && !$this->mForceTocPosition ) {
// append the TOC at the beginning
// Top anchor now in skin
- $sections[0] = $sections[0] . $toc . "\n";
+ $sections[0] .= $toc . "\n";
}
$full .= implode( '', $sections );
'img_link' => 'gallery-internal-link',
];
if ( $handler ) {
- $paramMap = $paramMap + $handler->getParamMap();
+ $paramMap += $handler->getParamMap();
// We don't want people to specify per-image widths.
// Additionally the width parameter would need special casing anyhow.
unset( $paramMap['img_width'] );
// TODO: we'll have to be smarter about this!
$this->mSections = array_merge( $this->mSections, $source->getSections() );
- $this->mTOCHTML = $this->mTOCHTML . $source->mTOCHTML;
+ $this->mTOCHTML .= $source->mTOCHTML;
// XXX: we don't want to concatenate title text, so first write wins.
// We should use the first *modified* title text, but we don't have the original to check.
if ( $request->wasPosted() ) {
// unique ID in case the same special page is open in multiple browser tabs
$uniqueId = MWCryptRand::generateHex( 6 );
- $key = $key . ':' . $uniqueId;
+ $key .= ':' . $uniqueId;
$queryParams = [ 'authUniqueId' => $uniqueId ] + $queryParams;
$authData = array_diff_key( $request->getValues(),
$uniqueId = $request->getVal( 'authUniqueId' );
if ( $uniqueId ) {
- $key = $key . ':' . $uniqueId;
+ $key .= ':' . $uniqueId;
$authData = $authManager->getAuthenticationSessionData( $key );
if ( $authData ) {
$authManager->removeAuthenticationSessionData( $key );
if ( $securityStatus === AuthManager::SEC_OK ) {
$uniqueId = $request->getVal( 'postUniqueId' );
if ( $uniqueId ) {
- $key = $key . ':' . $uniqueId;
+ $key .= ':' . $uniqueId;
$session = $request->getSession();
$data = $session->getSecret( $key );
if ( $data ) {
if ( $data ) {
// unique ID in case the same special page is open in multiple browser tabs
$uniqueId = MWCryptRand::generateHex( 6 );
- $key = $key . ':' . $uniqueId;
+ $key .= ':' . $uniqueId;
$queryParams['postUniqueId'] = $uniqueId;
$session = $request->getSession();
$session->persist(); // Just in case
$scalerThumbUrl = $scalerBaseUrl . '/' . $file->getUrlRel() .
'/' . rawurlencode( $scalerThumbName );
- // make a curl call to the scaler to create a thumbnail
+ // make an http request based on wgUploadStashScalerBaseUrl to lazy-create
+ // a thumbnail
$httpOptions = [
'method' => 'GET',
'timeout' => 5 // T90599 attempt to time out cleanly
* scripts, so the blacklist needs to check them all.
*
* @param string $filename
- * @return array
+ * @return array [ string, string[] ]
*/
public static function splitExtensions( $filename ) {
$bits = explode( '.', $filename );
* Perform case-insensitive match against a list of file extensions.
* Returns an array of matching extensions.
*
- * @param array $ext
- * @param array $list
+ * @param string[] $ext
+ * @param string[] $list
* @return bool
*/
public static function checkFileExtensionList( $ext, $list ) {
* non-existent/anonymous user accounts.
*/
public function getFirstEditTimestamp() {
+ return $this->getEditTimestamp( true );
+ }
+
+ /**
+ * Get the timestamp of the latest edit
+ *
+ * @since 1.33
+ * @return string|bool Timestamp of first edit, or false for
+ * non-existent/anonymous user accounts.
+ */
+ public function getLatestEditTimestamp() {
+ return $this->getEditTimestamp( false );
+ }
+
+ /**
+ * Get the timestamp of the first or latest edit
+ *
+ * @param bool $first True for the first edit, false for the latest one
+ * @return string|bool Timestamp of first or latest edit, or false for
+ * non-existent/anonymous user accounts.
+ */
+ private function getEditTimestamp( $first ) {
if ( $this->getId() == 0 ) {
return false; // anons
}
$actorWhere = ActorMigration::newMigration()->getWhere( $dbr, 'rev_user', $this );
$tsField = isset( $actorWhere['tables']['temp_rev_user'] )
? 'revactor_timestamp' : 'rev_timestamp';
+ $sortOrder = $first ? 'ASC' : 'DESC';
$time = $dbr->selectField(
[ 'revision' ] + $actorWhere['tables'],
$tsField,
[ $actorWhere['conds'] ],
__METHOD__,
- [ 'ORDER BY' => "$tsField ASC" ],
+ [ 'ORDER BY' => "$tsField $sortOrder" ],
$actorWhere['joins']
);
if ( !$time ) {
break;
case 'illative':
# Double the last letter and add 'n'
- $word = $word . mb_substr( $word, -1 ) . 'n';
+ $word .= mb_substr( $word, -1 ) . 'n';
break;
case 'inessive':
$word .= ( $aou ? 'ssa' : 'ssä' );
case "genitive": # ilik
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "тің";
+ $word .= "тің";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "тың";
+ $word .= "тың";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "нің";
+ $word .= "нің";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ның";
+ $word .= "ның";
}
} elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "дің";
+ $word .= "дің";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "дың";
+ $word .= "дың";
}
}
break;
case "dative": # barıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ке";
+ $word .= "ке";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "қа";
+ $word .= "қа";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ге";
+ $word .= "ге";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ға";
+ $word .= "ға";
}
}
break;
case "possessive dative": # täweldık + barıs
if ( in_array( $wordEnding, $firstPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "е";
+ $word .= "е";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "а";
+ $word .= "а";
}
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ге";
+ $word .= "ге";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ға";
+ $word .= "ға";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "не";
+ $word .= "не";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "на";
+ $word .= "на";
}
}
break;
case "accusative": # tabıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ті";
+ $word .= "ті";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ты";
+ $word .= "ты";
}
} elseif ( in_array( $wordEnding, $allVowels ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ні";
+ $word .= "ні";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ны";
+ $word .= "ны";
}
} elseif ( in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ді";
+ $word .= "ді";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ды";
+ $word .= "ды";
}
}
break;
case "possessive accusative": # täweldık + tabıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ді";
+ $word .= "ді";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ды";
+ $word .= "ды";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
- $word = $word . "н";
+ $word .= "н";
}
break;
case "dc4":
case "locative": # jatıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "те";
+ $word .= "те";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "та";
+ $word .= "та";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "де";
+ $word .= "де";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "да";
+ $word .= "да";
}
}
break;
case "possessive locative": # täweldık + jatıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "де";
+ $word .= "де";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "да";
+ $word .= "да";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "нде";
+ $word .= "нде";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "нда";
+ $word .= "нда";
}
}
break;
case "ablative": # şığıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "тен";
+ $word .= "тен";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "тан";
+ $word .= "тан";
}
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Sonants )
|| in_array( $wordEnding, $Sibilants )
) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ден";
+ $word .= "ден";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "дан";
+ $word .= "дан";
}
} elseif ( in_array( $wordEnding, $Nasals ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "нен";
+ $word .= "нен";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "нан";
+ $word .= "нан";
}
}
break;
case "possessive ablative": # täweldık + şığıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "нен";
+ $word .= "нен";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "нан";
+ $word .= "нан";
}
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ден";
+ $word .= "ден";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "дан";
+ $word .= "дан";
}
}
break;
case "dc6":
case "comitative": # kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
- $word = $word . "пен";
+ $word .= "пен";
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Nasals )
|| in_array( $wordEnding, $Sonants )
) {
- $word = $word . "мен";
+ $word .= "мен";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
- $word = $word . "бен";
+ $word .= "бен";
}
break;
case "dc61":
case "possessive comitative": # täweldık + kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
- $word = $word . "пенен";
+ $word .= "пенен";
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Nasals )
|| in_array( $wordEnding, $Sonants )
) {
- $word = $word . "менен";
+ $word .= "менен";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
- $word = $word . "бенен";
+ $word .= "бенен";
}
break;
default: # dc0 #nominative #ataw
case "genitive": # ilik
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "tiñ";
+ $word .= "tiñ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "tıñ";
+ $word .= "tıñ";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "niñ";
+ $word .= "niñ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "nıñ";
+ $word .= "nıñ";
}
} elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "diñ";
+ $word .= "diñ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "dıñ";
+ $word .= "dıñ";
}
}
break;
case "dative": # barıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ke";
+ $word .= "ke";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "qa";
+ $word .= "qa";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ge";
+ $word .= "ge";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ğa";
+ $word .= "ğa";
}
}
break;
case "possessive dative": # täweldık + barıs
if ( in_array( $wordEnding, $firstPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "e";
+ $word .= "e";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "a";
+ $word .= "a";
}
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ge";
+ $word .= "ge";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ğa";
+ $word .= "ğa";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ne";
+ $word .= "ne";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "na";
+ $word .= "na";
}
}
break;
case "accusative": # tabıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ti";
+ $word .= "ti";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "tı";
+ $word .= "tı";
}
} elseif ( in_array( $wordEnding, $allVowels ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ni";
+ $word .= "ni";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "nı";
+ $word .= "nı";
}
} elseif ( in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "di";
+ $word .= "di";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "dı";
+ $word .= "dı";
}
}
break;
case "possessive accusative": # täweldık + tabıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "di";
+ $word .= "di";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "dı";
+ $word .= "dı";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
- $word = $word . "n";
+ $word .= "n";
}
break;
case "dc4":
case "locative": # jatıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "te";
+ $word .= "te";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ta";
+ $word .= "ta";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "de";
+ $word .= "de";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "da";
+ $word .= "da";
}
}
break;
case "possessive locative": # täweldık + jatıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "de";
+ $word .= "de";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "da";
+ $word .= "da";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "nde";
+ $word .= "nde";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "nda";
+ $word .= "nda";
}
}
break;
case "ablative": # şığıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ten";
+ $word .= "ten";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "tan";
+ $word .= "tan";
}
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Sonants )
|| in_array( $wordEnding, $Sibilants )
) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "den";
+ $word .= "den";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "dan";
+ $word .= "dan";
}
} elseif ( in_array( $wordEnding, $Nasals ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "nen";
+ $word .= "nen";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "nan";
+ $word .= "nan";
}
}
break;
case "possessive ablative": # täweldık + şığıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "nen";
+ $word .= "nen";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "nan";
+ $word .= "nan";
}
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "den";
+ $word .= "den";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "dan";
+ $word .= "dan";
}
}
break;
case "dc6":
case "comitative": # kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
- $word = $word . "pen";
+ $word .= "pen";
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Nasals )
|| in_array( $wordEnding, $Sonants )
) {
- $word = $word . "men";
+ $word .= "men";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
- $word = $word . "ben";
+ $word .= "ben";
}
break;
case "dc61":
case "possessive comitative": # täweldık + kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
- $word = $word . "penen";
+ $word .= "penen";
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Nasals )
|| in_array( $wordEnding, $Sonants )
) {
- $word = $word . "menen";
+ $word .= "menen";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
- $word = $word . "benen";
+ $word .= "benen";
}
break;
default: # dc0 #nominative #ataw
case "genitive": # ilik
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "تٸڭ";
+ $word .= "تٸڭ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "تىڭ";
+ $word .= "تىڭ";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Nasals ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "نٸڭ";
+ $word .= "نٸڭ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "نىڭ";
+ $word .= "نىڭ";
}
} elseif ( in_array( $wordEnding, $Sonants ) || in_array( $wordEnding, $Sibilants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "دٸڭ";
+ $word .= "دٸڭ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "دىڭ";
+ $word .= "دىڭ";
}
}
break;
case "dative": # barıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "كە";
+ $word .= "كە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "قا";
+ $word .= "قا";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "گە";
+ $word .= "گە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "عا";
+ $word .= "عا";
}
}
break;
case "possessive dative": # täweldık + barıs
if ( in_array( $wordEnding, $firstPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ە";
+ $word .= "ە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ا";
+ $word .= "ا";
}
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "گە";
+ $word .= "گە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "عا";
+ $word .= "عا";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "نە";
+ $word .= "نە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "نا";
+ $word .= "نا";
}
}
break;
case "accusative": # tabıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "تٸ";
+ $word .= "تٸ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "تى";
+ $word .= "تى";
}
} elseif ( in_array( $wordEnding, $allVowels ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "نٸ";
+ $word .= "نٸ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "نى";
+ $word .= "نى";
}
} elseif ( in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "دٸ";
+ $word .= "دٸ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "دى";
+ $word .= "دى";
}
}
break;
case "possessive accusative": # täweldık + tabıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "دٸ";
+ $word .= "دٸ";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "دى";
+ $word .= "دى";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
- $word = $word . "ن";
+ $word .= "ن";
}
break;
case "dc4":
case "locative": # jatıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "تە";
+ $word .= "تە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "تا";
+ $word .= "تا";
}
} elseif ( in_array( $wordEnding, $allVowels ) || in_array( $wordEnding, $Sonorants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "دە";
+ $word .= "دە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "دا";
+ $word .= "دا";
}
}
break;
case "possessive locative": # täweldık + jatıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "دە";
+ $word .= "دە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "دا";
+ $word .= "دا";
}
} elseif ( in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "ندە";
+ $word .= "ندە";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "ندا";
+ $word .= "ندا";
}
}
break;
case "ablative": # şığıs
if ( in_array( $wordEnding, $Consonants ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "تەن";
+ $word .= "تەن";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "تان";
+ $word .= "تان";
}
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Sonants )
|| in_array( $wordEnding, $Sibilants )
) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "دەن";
+ $word .= "دەن";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "دان";
+ $word .= "دان";
}
} elseif ( in_array( $wordEnding, $Nasals ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "نەن";
+ $word .= "نەن";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "نان";
+ $word .= "نان";
}
}
break;
case "possessive ablative": # täweldık + şığıs
if ( in_array( $wordEnding, $firstPerson ) || in_array( $wordEnding, $thirdPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "نەن";
+ $word .= "نەن";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "نان";
+ $word .= "نان";
}
} elseif ( in_array( $wordEnding, $secondPerson ) ) {
if ( in_array( $wordLastVowel, $frontVowels ) ) {
- $word = $word . "دەن";
+ $word .= "دەن";
} elseif ( in_array( $wordLastVowel, $backVowels ) ) {
- $word = $word . "دان";
+ $word .= "دان";
}
}
break;
case "dc6":
case "comitative": # kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
- $word = $word . "پەن";
+ $word .= "پەن";
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Nasals )
|| in_array( $wordEnding, $Sonants )
) {
- $word = $word . "مەن";
+ $word .= "مەن";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
- $word = $word . "بەن";
+ $word .= "بەن";
}
break;
case "dc61":
case "possessive comitative": # täweldık + kömektes
if ( in_array( $wordEnding, $Consonants ) ) {
- $word = $word . "پەنەن";
+ $word .= "پەنەن";
} elseif ( in_array( $wordEnding, $allVowels )
|| in_array( $wordEnding, $Nasals )
|| in_array( $wordEnding, $Sonants )
) {
- $word = $word . "مەنەن";
+ $word .= "مەنەن";
} elseif ( in_array( $wordEnding, $Sibilants ) ) {
- $word = $word . "بەنەن";
+ $word .= "بەنەن";
}
break;
default: # dc0 #nominative #ataw
"ipb-confirm": "أكّد المنع",
"ipb-sitewide": "كامل",
"ipb-partial": "جزئي",
+ "ipb-sitewide-help": "كل صفحة على الويكي وجميع إجراءات المساهمة الأخرى.",
+ "ipb-partial-help": "صفحات أو نطاقات محددة.",
"ipb-pages-label": "الصفحات",
"ipb-namespaces-label": "نطاقات",
"badipaddress": "عنوان أيبي غير صحيح",
"ipb-confirm": "Пацьвердзіць блякаваньне",
"ipb-sitewide": "На ўсім сайце",
"ipb-partial": "Частковая",
+ "ipb-sitewide-help": "Кожная старонка ў гэтай вікі і ўсе іншыя дзеяньні.",
"ipb-pages-label": "Старонкі",
"ipb-namespaces-label": "Прасторы назваў",
"badipaddress": "Некарэктны IP-адрас",
"databaselocked": "Baza podataka već je zaključana.",
"databasenotlocked": "Baza podataka nije zaključana.",
"lockedbyandtime": "(od $1 dana $2 u $3)",
- "move-page": "Premeštanje $1",
+ "move-page": "Premještanje $1",
"move-page-legend": "Premjesti stranicu",
"movepagetext": "Korištenjem ovog formulara možete preimenovati stranicu, premještajući cijelu historiju na novo ime.\nČlanak pod starim imenom postat će stranica koja preusmjerava na članak pod novim imenom. \nMožete automatski izmijeniti preusmjerenje do izvornog naslova.\nAko se ne odlučite na to, provjerite [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|neispravna preusmjeravanja]].\nDužni ste provjeriti da svi linkovi i dalje nastave voditi na prave stranice.\n\nImajte na umu da članak <strong>neće</strong> biti premješten ako već postoji članak pod imenom na koje ga namjeravate preusmjeriti osim u slučaju stranice za preusmjeravanje koja nema nikakvih starih izmjena.\nTo znači da možete vratiti stranicu na prethodno mjesto ako pogriješite, ali ne možete zamijeniti postojeću stranicu.\n\n<strong>Napomena:</strong>\nOvo može biti drastična i neočekivana promjena kad su u pitanju popularne stranice.\nMolimo da dobro razmislite prije no što premjestite stranicu.",
"movepagetext-noredirectfixer": "Koristeći donji obrazac, preimenovat ćete stranicu i premjestiti cijelu njenu historiju na novi naziv.\nStari naziv postat će preusmjerenje na novi naziv.\nMolimo da provjerite postoje li [[Special:DoubleRedirects|dvostruka]] ili [[Special:BrokenRedirects|nedovršena preusmjerenja]].\nVi ste za to odgovorni te morate provjeriti jesu li linkovi ispravni i vode li tamo kamo bi trebali voditi.\n\nImajte na umu da stranica '''neće''' biti premještena ako već postoji stranica s tim imenom, osim ako je prazna ili je preusmjerenje ili nema ranije historije.\nOvo znači da možete preimenovati stranicu nazad gdje je ranije bila preimenovana ako ste pogriješili, ali ne možete ponovo preimenovati postojeću stranicu.\n\n<strong>Napomena:</strong>\nOvo može biti drastična i neočekivana promjena za popularnu stranicu;\ndobro razmislite o posljedicama prije nego što nastavite.",
"ipb-confirm": "Sperrung bestätigen",
"ipb-sitewide": "Auf der gesamten Website",
"ipb-partial": "Teilweise",
+ "ipb-sitewide-help": "Jede Seite auf dem Wiki und alle anderen Beitragsaktionen.",
+ "ipb-partial-help": "Spezielle Seiten oder Namensräume.",
"ipb-pages-label": "Seiten",
"ipb-namespaces-label": "Namensräume",
"badipaddress": "Die IP-Adresse hat ein falsches Format.",
"ipb-confirm": "Confirmer le blocage",
"ipb-sitewide": "À tout le site",
"ipb-partial": "Partiel",
+ "ipb-sitewide-help": "Chaque page du wiki et toutes les autres actions de contribution.",
+ "ipb-partial-help": "Pages ou espaces de noms spécifiques.",
"ipb-pages-label": "Pages",
"ipb-namespaces-label": "Espaces de noms",
"badipaddress": "Adresse IP incorrecte",
"ipb-confirm": "אישור החסימה",
"ipb-sitewide": "כל האתר",
"ipb-partial": "חלקית",
+ "ipb-partial-help": "עמודים או מרחבי שם מסוימים.",
"ipb-pages-label": "דפים",
"ipb-namespaces-label": "מרחבי שם",
"badipaddress": "כתובת IP שגויה",
"recentchangeslinked-feed": "Kapcsolódó változtatások",
"recentchangeslinked-toolbox": "Kapcsolódó változtatások",
"recentchangeslinked-title": "A(z) $1 laphoz kapcsolódó változtatások",
- "recentchangeslinked-summary": "Alább azon lapoknak a legutóbbi változtatásai láthatóak, amelyekre hivatkozik egy megadott lap. (Ha egy kategória tagjaira vagy kíváncsi, írd be, hogy {{ns:category}}:katerógianév.)\nA [[Special:Watchlist|figyelőlistádon]] szereplő lapok <strong>félkövérrel</strong> vannak jelölve.",
+ "recentchangeslinked-summary": "Alább azon lapoknak a legutóbbi változtatásai láthatóak, amelyekre hivatkozik egy megadott lap. (Ha egy kategória tagjaira vagy kíváncsi, írd be, hogy {{ns:category}}:kategórianév.)\nA [[Special:Watchlist|figyelőlistádon]] szereplő lapok <strong>félkövérrel</strong> vannak jelölve.",
"recentchangeslinked-page": "Lap neve:",
"recentchangeslinked-to": "Inkább az erre linkelő lapok változtatásait mutasd",
"recentchanges-page-added-to-category": "[[:$1]] hozzáadva a kategóriához",
"listingcontinuesabbrev": "دومالٱ",
"index-category": "بألگە یا سیاە دار",
"noindex-category": "بلگٱیا بی سیائٱ",
- "broken-file-category": "بألگە یایی کئ هوم پئیڤأند جانیایا ئشگئسئ نە دارئن",
+ "broken-file-category": "بٱلگٱیایی کاْ هوم پاٛڤٱن جانؽایا اْشگس ناْ دارٱن",
"categoryviewer-pagedlinks": "($1) ($2)",
"about": "دٱربارٱ",
"article": "مینوٙنە یا بألگە",
"nextn-title": "دمایی $1 {{PLURAL:$1|نتيجٱ|نتيجيا}}",
"shown-title": "نشوݩ داٛین $1 {{PLURAL:$1|نتیجٱ|نتیجٱیا}} سی هار بٱلگٱ",
"viewprevnext": "ديین ($1 {{int:pipe-separator}} $2) ($3)",
- "searchmenu-exists": "'''ایچه بلگه ای هئ وه نوم\"[[:$1]]\" که ها د ای ویکی'''",
+ "searchmenu-exists": "'''ایچاْ بٱلگاٛیؽ هؽ ڤ نوم\"[[:$1]]\" کاْ ها د اؽ ڤیکی'''",
"searchmenu-new": "'''اؽ بٱلگٱ ناْ دۏرس كو \"[[:$1]]\" د اؽ ڤیکی!'''",
"searchprofile-articles": "بٱلگٱيا مؽنونٱ دار",
"searchprofile-images": "ڤارسگرؽا خلکمن",
"search-redirect": "(ڤرگٱشتن سی $1)",
"search-section": "(بٱئرجا $1)",
"search-category": "(دسه $1)",
- "search-file-match": "(یکی کردن مینونه جانیا)",
+ "search-file-match": "(یٱکی کردن مینونٱ جانؽا)",
"search-suggest": "مٱنزۊرت يٱ بی:$1",
"search-rewritten": "نئشوٙ دأئن نأتیجە یا سی $1. سی نئموٙنە بأگأردیت سی $2.",
"search-interwiki-caption": "پروجه یا خوئر",
"recentchanges-legend": "گوزینٱیا آلشتؽا ایسنی",
"recentchanges-summary": "دۏ بؽشتر آلشتؽا تازباو ناْ د ڤیکی د اؽ بٱلگٱ پاٛجۊری کو.",
"recentchanges-noresult": "هیچ آلشتؽ د درازا دۉرٱ دؽار بیٱ ڤا اؽ ماٛعیاؽا یٱکی ناٛی.",
- "recentchanges-feed-description": "دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.",
+ "recentchanges-feed-description": "دۏ بؽشتر آلشتؽا تازباو ناْ د ڤیکی کا ها د هڤال هون پاٛگیری کو.",
"recentchanges-label-newpage": "اؽ ڤیرایش یاٛ بٱلگٱ تازٱ دۏرس کردٱ.",
"recentchanges-label-minor": "یٱ یاٛ ڤیرایش کوچکٱ",
"recentchanges-label-bot": "اؽ ڤيرايش ناْ ياٛ بوت ٱنجوم داٛیٱ",
"upload-permitted": "جوٙرا صئلادار جانیا {{PLURAL:$2|جوٙر|جوٙرا}}:$1 .",
"upload-preferred": "جوٙرا حاستئنی جانیا {{PLURAL:$2|جوٙر|جوٙرا}}:$1 .",
"upload-prohibited": "جورا جانیا صلادار:$1{{PLURAL:$2|.}}",
- "uploadlogpage": "سوارکرد",
+ "uploadlogpage": "سڤارکرد",
"uploadlogpagetext": "نومگه هاری یه گل نومگه د آخری سوارکرد جانیایا هئ.\nسی د نو سیل کردن[[Special:NewFiles|عسگدونی جانیایا تازه نه]] به ونیت.",
"filename": "نوم جانیا",
"filedesc": "چکسٱ",
"specialloguserlabel": "انجومکار:",
"speciallogtitlelabel": "حاستئنی(داسوٙن یا نوم کاریاری سی کاریار):",
"log": "پهرستنومٱیا",
- "all-logs-page": "Ù\87Ù\85Ù\87 Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù\87 Û\8cا عÙ\85Ù\88می",
+ "all-logs-page": "Ù\87Ù\85Ù± Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù±Û\8cا عÙ\88Ù\85Û\8aمی",
"alllogstext": "نماشت یه جا همه پهرستنومه یا که هان د{{SITENAME}}.\nمی تونید وا انتخاو نوع پهرستنومه، نوم کاریاری(حساس وه کؤچکی و گپی حرفیا) و بلگه یا آلشت کرده(حساس و گپی و کؤچکی حرنیا) نمایشت نه دیر د ویرتر بکیت.\n\n{{SITENAME}}.",
"logempty": "او چی ای که شما میهایت د پهرستنومه نیئش.",
"log-title-wildcard": "بلگه یایی نه پی جوری کو که وا ای سرون شرو موئن",
"showhideselectedlogentries": "آلشت دئن ورتیه گر پهرستنومه یا انتخاو بیه",
"log-edit-tags": "ویرایشت سردیسیایی که پهرستنومه شو گل گر بیه",
- "allpages": "Ù\87Ù\85Ù\87 بÙ\84Ú¯يا",
+ "allpages": "Ù\87Ù\85Ù± بٱÙ\84Ú¯Ù±يا",
"nextpage": "بلگه نهایی($1)",
"prevpage": "بلگه دمایی($1)",
"allpagesfrom": "بلگه یای که د شرو بینه نشو بیه:",
"removedwatchtext-short": "بلگه \"$1\" د سیل برگ جا وه جا بیه.",
"watch": "ساٛلٛ کردن",
"watchthispage": "دیئن ئی بألگە",
- "unwatch": "دیە نأبییە",
+ "unwatch": "دیئٱ ناٛییٱ",
"unwatchthispage": "نئھاگئری دیئن",
"notanarticle": "ھیچ بألگە مینوٙنە داری نی",
"notvisiblerev": "آخری وانئری که د دس یه کاریار هنی انجوم بیه پاکسا بیه.",
"contributions-title": "ھومیاری كاریار سی $1",
"mycontris": "هومياریا",
"anoncontribs": "هومیاریا",
- "contribsub2": "سي {{جنسيت:$3|$1}} ($2)",
+ "contribsub2": "سی {{جنسيٱت:$3|$1}} ($2)",
"contributions-userdoesnotexist": "کاریار \"$1\" ثوت نام نکرده.",
"nocontribs": "هیچ آلشتی وا ای مشقصات دیاری نکرد.",
"uctop": "تازٱ بۊ",
"sp-contributions-newbies": "فقٱت هومیارؽایؽ کاْ د هساو تازٱ بیٱ نشوݩ باٛیٱ",
"sp-contributions-newbies-sub": "سی حساویا تازه",
"sp-contributions-newbies-title": "هومیاریا کاریار سی حساویا تازه",
- "sp-contributions-blocklog": "پهرستنۊمٱ قولف بیٱ",
+ "sp-contributions-blocklog": "پهرستنومٱ قولف بیٱ",
"sp-contributions-suppresslog": "پاکساگری کردن هومیاریا کاریار",
"sp-contributions-deleted": "هومیاریا پاکسا بیه کاریار",
- "sp-contributions-uploads": "سواركرديا",
- "sp-contributions-logs": "Ù\86Û\8cسÙ\86Ù\86 رخ Ù\88Ù\86Û\8cا",
+ "sp-contributions-uploads": "سڤاركردؽا",
+ "sp-contributions-logs": "Ù\86Û\8cسٱÙ\86Ù\86 رÙ\88Ø® Ú¤Ù±Ù\86ؽا",
"sp-contributions-talk": "چٱک چنٱ",
"sp-contributions-userrights": "دیوونداری حقوق کاریار",
"sp-contributions-blocked-notice": "د دسرسی ای کاریا د ایسنی نهاگری بیه.\nآخری برشت د پهرستنومه نهاگری ها د سرچشمه هاری:",
"whatlinkshere-title": "بٱلگاٛؽ کاْ د $1 هوم پاٛڤٱن بیٱ",
"whatlinkshere-page": "بٱلگٱ",
"linkshere": "بٱلگٱیا نوئایی د '''$2''' هوم پاٛڤٱن بیٱ",
- "nolinkshere": "Ù\87Û\8cÚ\98 بگÙ\84Ù\87 اÛ\8c د '''$2''' Ù\87Ù\88Ù\85 Ù¾Û\8cÙ\88Ù\86د Ù\86بÛ\8cÙ\87",
+ "nolinkshere": "Ù\87Û\8cÚ\86 بٱگÙ\84اÙ\9bÛ\8cؽ د '''$2''' Ù\87Ù\88Ù\85 پاÙ\9bÚ¤Ù±Ù\86 Ù\86اÙ\9bÛ\8cÛ\8cÙ±",
"nolinkshere-ns": "هیچ بلگه ای د نومجا انتخاو بیه وه'''$2''' هوم پیوند ناره.",
"isredirect": "بٱلگٱ دوئارٱ ڤرگٱشتن",
"istemplate": "نشونی داٛئن",
"blocklogpage": "قلف",
"blocklog-showlog": "تیرنشون ای آی پی دماتر نهاگیری بیه.\nنهاگری ای پهرستنومه وا سرچشمه هاری دروس بیه:",
"blocklog-showsuppresslog": "تیرنشون ای آی پی دماتر نهاگیری بیه.\nنهاگری ای پهرستنومه وا سرچشمه هاری دروس بیه:",
- "blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3 قلف بیه",
+ "blocklogentry": " [[$1]] ڤا یاٛ ڤٱخت تموم بیئن $2 ۉ $3 قلف بییٱ",
"reblock-logentry": "میزوکاری سی نهاگری[[$1]] آلشت بیه سی آخر نهاگری د $2 $3",
"blocklogtext": "ای پهرستنومه سی نهاگری یا واز کردن دسرسی کاریاریائه.\nتیرنشونیا آی پی که خود انجومن نهاگری بینه د ایسنی نومگه کاری نبینه.\nسی نومگه نهاگریا و بسه بینیا د ایسنی روئیت د [[Special:BlockList|نومگه نهاگری بیه یا]].",
"unblocklogentry": "وا کردن قلف $1",
"tooltip-ca-undelete": "د نو زنه کردن ویرایشتیا ری ای بلگه دما یه که پاکساگری بان",
"tooltip-ca-move": "اؽ بٱلگٱ ناْ جا ڤ جا كو",
"tooltip-ca-watch": "اْزاف کردن اؽ بٱلگٱ ڤ نوم نڤشت پاٛگیریاتو",
- "tooltip-ca-unwatch": "ورداشتن ای بلگه وه نوم نوشت پیگئریاتو",
+ "tooltip-ca-unwatch": "ڤرداشتن اؽ بٱلگٱ ڤ نوم نڤشت پاٛگیریاتو",
"tooltip-search": "پاٛ جۊری {{SITENAME}}",
"tooltip-search-go": "رۉ د بٱلگاٛیؽ کاْ یٱ نوم روسی ها مؽنش ٱلڤٱت ٱر دش بۊئٱ",
"tooltip-search-fulltext": "بٱلگٱیاناْ سی چنی نیسساٛیؽ پاٛ جۊری بٱکو.",
"tooltip-preview": "پیش ساٛلٛ آلشتؽاتو، لوتف بٱکؽت ڤنوناْ دما د آمایٱ کاریشو ڤ کار باٛیرؽت!",
"tooltip-diff": "آلشتؽا ناْ کاْ شما د ای مٱتن دۏرس کردؽتٱ نشوݩ باٛیٱ",
"tooltip-compareselectedversions": "فٱرخؽا مؽنجا د تا د دۏ بار دیئن اؽ بٱلگٱ ناْ بونؽت",
- "tooltip-watch": "ای بلگه نه د سیل برگتو اضاف بکید",
+ "tooltip-watch": "اؽ بٱلگٱ ناْ د ساٛلٛ بٱرگتو اْزاف بٱکؽت",
"tooltip-watchlistedit-normal-submit": "ؤرداشتن سرونیا",
"tooltip-watchlistedit-raw-submit": "وه هنگوم سازی سیل برگ",
"tooltip-recreate": "د نو راس کردن بلگه بی یه که و پاکساگری دماتر وه سیل بکیم",
"logentry-import-interwiki": "$1 $3 نه د یه گل ویکی هنی {{GENDER:$2|وامین اورد}}",
"logentry-merge-merge": "$1 $3 نه د $4 {{GENDER:$2| سریک سازی کرد}} (نسقه تا $5)",
"logentry-move-move": "$1 {{GENDER:$2|جا ڤ جا کردن}} بٱلگٱ $3 ناْ سی $4",
- "logentry-move-move-noredirect": "$1 بÙ\84Ú¯Ù\87 $3 Ù\86Ù\87 بÛ\8c Û\8cÙ\87 Ú©Ù\87 Û\8cÙ\87 Ú¯Ù\84 Ù\88اگردÙ\88Ù\86Û\8c داشÙ\88ئÙ\87 د $4 {{GENDER:$2|جا Ù\88Ù\87 جاکاری کرد}}",
+ "logentry-move-move-noredirect": "$1 بٱÙ\84Ú¯Ù± $3 Ù\86اÙ\92 بؽ Û\8cÙ± کاÙ\92 Û\8cاÙ\9b ڤاگٱردÙ\88Ù\86Û\8c داشتÛ\8aئÛ\89 د $4 {{GENDER:$2|جا Ú¤ جا کاری کرد}}",
"logentry-move-move_redir": "$1 بلگه $3 نه د $4 که واگردونی بی {{GENDER:$2|جا وه جاکاری کرد}}",
"logentry-move-move_redir-noredirect": "$1 بلگه $3 نه بی یه که یه گل واگردونی د $4 داشتوئه که یه خوش واگردونی بی {{GENDER:$2|جا وه جاکاری کرد}}",
"logentry-patrol-patrol": "$1 نسقه $4 بلگه $3 نه چی یه گل چی تیه نئری بیه {{GENDER:$2|نشودار کرد}}",
- "logentry-patrol-patrol-auto": "$1 نسقه $4 بلگه $3 نه وه حال و بار خودانجوم چی یه گل بلگه تیه نیئر بیه {{GENDER:$2|نشودار کرد}}",
+ "logentry-patrol-patrol-auto": "$1 نۏسخٱ $4 بٱلگٱ $3 ناْ ڤ هال ۉ بار خودٱنجوم چی یاٛ بٱلگٱ تیٱ نیر بیٱ {{GENDER:$2|نشودار کرد}}",
"logentry-newusers-newusers": "حساو کاریاری $1 {{GENDER:$2|دروس بیه}}",
"logentry-newusers-create": "هساو کاربٱری $1 {{GENDER:$2|دۏرس بی}}",
"logentry-newusers-create2": "حساو کاریاری $3،وه دس $1 {{GENDER:$2|دروس بی}}",
"ipb-confirm": "Потврди блок",
"ipb-sitewide": "Насекаде",
"ipb-partial": "Делумно",
+ "ipb-sitewide-help": "Секоја страница на викито и сите други придонесувачки дејства.",
+ "ipb-partial-help": "Поединечни страници или именски простори.",
"ipb-pages-label": "Страници",
"ipb-namespaces-label": "Именски простори",
"badipaddress": "Неважечка IP-адреса",
"searchall": "alle",
"showingresults": "Hieronder {{PLURAL:$1|staat '''1''' resultaat|staan '''$1''' resultaten}} vanaf #'''$2'''.",
"showingresultsinrange": "Hieronder {{PLURAL:$1|wordt|worden}} maximaal {{PLURAL:$1|<strong>1</strong> resultaat|<strong>$1 </strong>resultaten}} weergegeven in het bereik #<strong>$2</strong> tot #<strong>$3</strong>.",
- "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultaten <strong>$1 - $2</strong> van <strong>$3</strong>}}",
+ "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultaten <strong>$1–$2</strong> van <strong>$3</strong>}}",
"search-nonefound": "Er zijn geen resultaten voor uw zoekopdracht.",
"search-nonefound-thiswiki": "Er zijn voor uw zoekopdracht geen resultaten op deze site.",
"powersearch-legend": "Uitgebreid zoeken",
"ipb-confirm": "Confirmar bloqueio",
"ipb-sitewide": "Em todo o site",
"ipb-partial": "Parcial",
+ "ipb-sitewide-help": "Cada página na wiki e todas as outras ações de contribuição.",
+ "ipb-partial-help": "Páginas ou espaços nominais específicos.",
"ipb-pages-label": "Páginas",
"ipb-namespaces-label": "Espaços nominais",
"badipaddress": "Endereço de IP inválido",
"ipb-confirm": "Confirmar o bloqueio",
"ipb-sitewide": "Em todo o site",
"ipb-partial": "Parcial",
+ "ipb-sitewide-help": "Todas as páginas da wiki e todos as outras operações de participação.",
+ "ipb-partial-help": "Páginas ou espaços nominais específicos.",
"ipb-pages-label": "Páginas",
"ipb-namespaces-label": "Espaços nominais",
"badipaddress": "Endereço IP inválido",
"ipb-confirm": "Potrdi blokado",
"ipb-sitewide": "Po celotni strani",
"ipb-partial": "Delno",
+ "ipb-sitewide-help": "Vsaka stran na wikiju in vsa druga dejanja prispevanja.",
+ "ipb-partial-help": "Določene strani ali imenski prostori.",
"ipb-pages-label": "Strani",
"ipb-namespaces-label": "Imenski prostori",
"badipaddress": "Neveljaven IP-naslov ali uporabniško ime.",
"newwindow": "(響新視窗度打開)",
"cancel": "取消",
"moredotdotdot": "更多...",
- "morenotlisted": "爾張清單可能重未完成。",
+ "morenotlisted": "爾張清單可能唔完整。",
"mypage": "版",
"mytalk": "傾偈",
"anontalk": "傾偈",
"botpasswords-editexisting": "改已經有嘅機械人密碼",
"botpasswords-label-needsreset": "(密碼要重新設定)",
"botpasswords-label-appid": "機械人名:",
- "botpasswords-label-create": "å\89µé\80 ",
- "botpasswords-label-update": "上載",
+ "botpasswords-label-create": "建ç«\8b",
+ "botpasswords-label-update": "更新",
"botpasswords-label-cancel": "取消",
"botpasswords-label-delete": "刪除",
- "botpasswords-label-resetpassword": "改過個個密碼",
+ "botpasswords-label-resetpassword": "改過第個密碼",
"botpasswords-label-grants": "啱用嘅授權:",
"botpasswords-label-grants-column": "授咗權",
"botpasswords-bad-appid": "機械人名 \"$1\" 無效。",
"searchprofile-advanced-tooltip": "響自定空間名度搵",
"search-result-size": "$1 ($2個字)",
"search-result-category-size": "$1位成員 ($2個細類,$3個檔案)",
- "search-redirect": "(由$1過嚟)",
+ "search-redirect": "(由$1跳轉過來)",
"search-section": "(小節 $1)",
"search-category": "(類 $1)",
"search-file-match": "(夾啱樓案内容)",
"timezoneregion-europe": "歐洲",
"timezoneregion-indian": "印度洋",
"timezoneregion-pacific": "太平洋",
- "allowemail": "允許其它用戶發電子郵件俾我",
+ "allowemail": "畀其它用戶發電郵俾我",
"email-allow-new-users-label": "接收新簇簇用戶發嘅電郵",
"email-blacklist-label": "禁止呢啲用戶發電郵畀我:",
"prefs-searchoptions": "搵嘢",
"prefs-help-prefershttps": "呢項喜好設定會喺你下次簽到先至開始生效。",
"prefswarning-warning": "你改嘅喜好設定改動重未記低。\n如果你未撳「$1」就走咗,你嘅喜好設定唔會有更新。",
"prefs-tabs-navigation-hint": "貼士:可以用鍵盤嘅←或→掣睇一覽內嘅分頁",
- "userrights": "用戶嘅權限",
- "userrights-lookup-user": "揀一個用戶",
+ "userrights": "用戶權限",
+ "userrights-lookup-user": "揀個用戶",
"userrights-user-editname": "輸入一個用戶名:",
"editusergroup": "載入用戶組",
"editinguser": "改緊<strong>[[User:$1|$1]]</strong>嘅用戶權限 $2",
"userrights-expiry-existing": "現時到期嘅時間: $2 $3",
"userrights-expiry-othertime": "其它時間:",
"userrights-expiry-options": "1日:1 day,1個禮拜:1 week,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year",
- "userrights-invalid-expiry": "çµ\84\"$1\"å\98\85é\81\8eæ\9c\9fæ\99\82é\96\93å\86\87æ\95\88",
+ "userrights-invalid-expiry": "ç\94¨æ\88¶çµ\84ã\80\8c$1ã\80\8då\98\85é\81\8eæ\9c\9fæ\99\82é\96\93ç\84¡æ\95\88ã\80\82",
"userrights-expiry-in-past": "組\"$1\"嘅過期時間係過咗嘅時間。",
"userrights-conflict": "用戶權限更改有衝突!請再睇過同確認你嘅改動。",
"group": "組:",
"rcfilters-filter-user-experience-level-unregistered-label": "未註冊",
"rcfilters-filter-user-experience-level-unregistered-description": "無簽到嘅編者。",
"rcfilters-filter-user-experience-level-newcomer-label": "新手",
- "rcfilters-filter-user-experience-level-newcomer-description": "少過4日、10次編輯嘅用戶",
+ "rcfilters-filter-user-experience-level-newcomer-description": "活躍少過4日同少過10次編輯嘅用戶",
"rcfilters-filter-user-experience-level-learner-label": "學徒",
"rcfilters-filter-user-experience-level-learner-description": "編輯數同經驗多過「新手」但少過「老手」。",
"rcfilters-filter-user-experience-level-experienced-label": "老手",
- "rcfilters-filter-user-experience-level-experienced-description": "超過30日同埋500次編輯嘅用戶",
+ "rcfilters-filter-user-experience-level-experienced-description": "活躍超過30日同埋超過500次編輯嘅用戶。",
"rcfilters-filtergroup-automated": "自動貢獻",
"rcfilters-filter-bots-label": "機械人",
"rcfilters-filter-bots-description": "用自動工具做嘅貢獻",
"ipb-confirm": "確認封鎖",
"ipb-sitewide": "全站範圍",
"ipb-partial": "部分",
+ "ipb-sitewide-help": "在 wiki 上的各個頁面以及其它貢獻行為。",
+ "ipb-partial-help": "特殊頁面或命名空間。",
"ipb-pages-label": "頁面",
"ipb-namespaces-label": "命名空間",
"badipaddress": "無效的 IP 位址",
/**
* Get iterator for links for categories.
* @param IDatabase $dbr
- * @param array $ids List of page IDs
+ * @param int[] $ids List of page IDs
* @return Traversable
*/
protected function getCategoryLinksIterator( IDatabase $dbr, array $ids ) {
* @ingroup Maintenance
*/
class CleanupInvalidDbKeys extends Maintenance {
- /** @var array List of tables to clean up, and the field prefix for that table */
+ /** @var array[] List of tables to clean up, and the field prefix for that table */
protected static $tables = [
// Data tables
[ 'page', 'page' ],
}
/**
- * @param array $matches
+ * @param string[] $matches
* @return string
*/
protected function hexChar( $matches ) {
* @param IDatabase $dbw
* @param string[] $indexFields Fields in the index being ordered by
* @param object $row Database row
- * @return array [ string $next, string $display ]
+ * @return string[] [ string $next, string $display ]
*/
private function makeNextCond( $dbw, $indexFields, $row ) {
$next = '';
/**
* Things that were formerly globals and should still be converted
*
- * @var array
+ * @var string[]
*/
protected $formerGlobals = [
'TrackingCategories',
/**
* No longer supported globals (with reason) should not be converted and emit a warning
*
- * @var array
+ * @var string[]
*/
protected $noLongerSupportedGlobals = [
'SpecialPageGroups' => 'deprecated', // Deprecated 1.21, removed in 1.26
/**
* Keys that should be put at the top of the generated JSON file (T86608)
*
- * @var array
+ * @var string[]
*/
protected $promote = [
'name',
* @param FileBackend $src
* @param FileBackend $dst
* @param string $backendRel
- * @return array (rel paths in $src minus those in $dst)
+ * @return string[] (rel paths in $src minus those in $dst)
*/
protected function getListingDiffRel( FileBackend $src, FileBackend $dst, $backendRel ) {
$srcPathsRel = $src->getFileList( [
}
/**
- * @param array $srcPathsRel
+ * @param string[] $srcPathsRel
* @param string $backendRel
* @param FileBackend $src
* @param FileBackend $dst
}
/**
- * @param array $dstPathsRel
+ * @param string[] $dstPathsRel
* @param string $backendRel
* @param FileBackend $dst
* @return void
* Delete one or more revisions from the database
* Do this inside a transaction
*
- * @param array $id Array of revision id values
+ * @param int[] $id Array of revision id values
* @param IDatabase $dbw Master DB handle
*/
- private function deleteRevs( $id, &$dbw ) {
- if ( !is_array( $id ) ) {
- $id = [ $id ];
- }
+ private function deleteRevs( array $id, &$dbw ) {
$dbw->delete( 'revision', [ 'rev_id' => $id ], __METHOD__ );
// Delete from ip_changes should a record exist.
/**
* Get iterator for links for categories.
* @param IDatabase $dbr
- * @param array $ids List of page IDs
+ * @param int[] $ids List of page IDs
* @return Traversable
*/
public function getCategoryLinksIterator( IDatabase $dbr, array $ids ) {
$sql = "SELECT DISTINCT il_to, img_name
FROM $imagelinks
- LEFT OUTER JOIN $image
+ LEFT JOIN $image
ON il_to=img_name";
$result = $dbr->query( $sql );
/**
* Get an array of author names from a documentation comment containing @author declarations.
* @param string $comment Documentation comment
- * @return array Array of author names (strings)
+ * @return string[] Array of author names
*/
protected function getAuthorsFromComment( $comment ) {
$matches = null;
. "(this may take a while on a large wiki)\n" );
$result = $dbw->query( "
SELECT *
- FROM $page LEFT OUTER JOIN $revision ON page_latest=rev_id
+ FROM $page LEFT JOIN $revision ON page_latest=rev_id
" );
$found = 0;
foreach ( $result as $row ) {
// clean up
$block->delete();
}
+
+ /**
+ * @covers User::getFirstEditTimestamp
+ * @covers User::getLatestEditTimestamp
+ */
+ public function testGetFirstLatestEditTimestamp() {
+ $clock = MWTimestamp::convert( TS_UNIX, '20100101000000' );
+ MWTimestamp::setFakeTime( function () use ( &$clock ) {
+ return $clock += 1000;
+ } );
+ $user = $this->getTestUser()->getUser();
+ $firstRevision = self::makeEdit( $user, 'Help:UserTest_GetEditTimestamp', 'one', 'test' );
+ $secondRevision = self::makeEdit( $user, 'Help:UserTest_GetEditTimestamp', 'two', 'test' );
+ // Sanity check: revisions timestamp are different
+ $this->assertNotEquals( $firstRevision->getTimestamp(), $secondRevision->getTimestamp() );
+
+ $this->assertEquals( $firstRevision->getTimestamp(), $user->getFirstEditTimestamp() );
+ $this->assertEquals( $secondRevision->getTimestamp(), $user->getLatestEditTimestamp() );
+ }
+
+ /**
+ * @param User $user
+ * @param string $title
+ * @param string $content
+ * @param string $comment
+ * @return \MediaWiki\Revision\RevisionRecord|null
+ */
+ private static function makeEdit( User $user, $title, $content, $comment ) {
+ $page = WikiPage::factory( Title::newFromText( $title ) );
+ $content = ContentHandler::makeContent( $content, $page->getTitle() );
+ $updater = $page->newPageUpdater( $user );
+ $updater->setContent( 'main', $content );
+ return $updater->saveRevision( CommentStoreComment::newUnsavedComment( $comment ) );
+ }
}